const express = require('express')
const app = express()


const expressJWT = require('express-jwt')

const config = require('./config')
/* 
1-只要是api开头的不需要携带token   不是api开头的就需要携带token
2-会将用户信心存在req.user中
*/
app.use(expressJWT({ secret: config.jwtSecretKey }).unless({ path: /^\/api\// }))


// 解析 POST 提交过来的表单数据
app.use(express.urlencoded({ extended: false }))

/* 解决跨域 */
const cors = require('cors')
app.use(cors())

// 响应数据的中间件 
app.use(function (req, res, next) {
    // status = 0 为成功； status = 1 为失败； 默认将 status 的值设置为 1，方便处理失败的情况 
    res.cc = function (err, status = 1) {
        res.send({
            // 状态 
            status,
            // 状态描述，判断 err 是 错误对象 还是 字符串
            message: err instanceof Error ? err.message : err,
        })
    }
    next()
})

/* 导入路由对象 */
const router = require('./router/user')
app.use('/api', router)


/* 用户信息 */
const userInfoRouter = require('./router/userinfo')
app.use('/my', userInfoRouter)


/* 文章分类 */
const artCateRouter = require('./router/artcate')
app.use('/my/article', artCateRouter)

// app.post('/aa',(req,res)=>{
//     res.send('aa')
// } )

app.get('/', (req, res) => {
    res.send('1111')
})

/* 规则 */
const joi = require('@hapi/joi')
// const joi = require('joi')
app.use((err, req, res, next) => {
    // 数据验证失败
    if (err instanceof joi.ValidationError) return res.cc(err)
    // 未知错误 
    if (err.name === 'UnauthorizedError') {
        return res.send({
            status: 401,
            message: '无效的token',
        })
    }
    return res.send('异常')
})

app.listen(3000, () => {
    console.log('服务器:http://127.0.0.1:3000')
})